/**
 * 
 * Skript von Florian
 * 
 * History:
 * 
 * Philip: raycast jetzt auf playerPlane damit die Blickrichtung nicht durch Objekte oder Gegner gestört wird
 * 		   Movement mittels character Controller (.Move funktionen)
 * 
 **/

using UnityEngine;
using System.Collections;

/* Skript fuer die Steuerung des Spielers. Dieses Skript sollte*
 * auf die Spielfigur gelegt werden. Die Rotation der Spiel-   *
 * figur in Richtung des Mauscursors funktioniert nur wenn sich*
 * der Mauscursor und die Spielfigur über einem Objekt(Plane)  *
 * befindet mit dem Tag "Boden".							   */

public class PlayerControllerScript : MonoBehaviour {

	Animator anim;

	public float speed = 1.2f; /* Geschwindigkeit der Bewegung */
	public float forwardSpeed = 2f;
	public float backwardsSpeed = 0.5f;
	public float sideStepSpeed = 0.5f;

	public Vector3 forwardDirection;

	public Vector3 lookRotationPoint; /* Blickrichtung des Spielers */

	private Vector3 moveDirection = Vector3.zero;
	private Vector3 down = Vector3.zero;

	// Use this for initialization
	void Start () {
		forwardDirection = transform.forward;
	}

	void OnDrawGizmos() {
		Vector3 weaponHeight  = new Vector3 (0,1f,0);
		Gizmos.color = Color.green;
		Gizmos.DrawRay(transform.position + weaponHeight,lookRotationPoint - weaponHeight);
	}
	
	/* Durch GetAxis erhalten wir einen Wert zwischen -1 und 1 *
	 * Dadurch bewegen wir den Spieler mit -5 und 5 durch die  *
	 * Spielwelt. 											   */
	void Update () {


		//Debug.Log(Input.GetAxis("Horizontal"));
		//Debug.Log(Input.GetAxis("Vertical"));

		/* Umrechnung der 2D-Koordinaten in einen Punkt in der Spielwelt */
		//RaycastHit hit;

		CharacterController controller = GetComponent<CharacterController>();
		Plane playerPlane = new Plane(Vector3.up,(transform.position + new Vector3(0,1f,0))) ; //Creates plane at player position for mouse tracking by Philip

		//RaycastHit hit;
		//Vector3 mouseHit;
		Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
		float hitDist;
		
		/*if(Physics.Raycast(ray, out hit,200))
		{
			mouseHit = hit.point;
		}*/



		//Rotation der Spielfigur in Richtung des Mauscursors 
		if (playerPlane.Raycast (ray, out hitDist))
		{
			//if ( hit == "Boden" )
			{
				lookRotationPoint = ray.GetPoint(hitDist) - transform.position;
				transform.rotation = Quaternion.LookRotation ( lookRotationPoint );
				transform.rotation = Quaternion.Euler ( 0, transform.rotation.eulerAngles.y, 0 );
			//}
			}
		//float move = Input.GetAxis ("Vertical");
		//anim.SetFloat("Speed",move);
		//float strafe = Input.GetAxis ("Horizontal");
		//anim.SetFloat ("StrafeSpeed",strafe);

		//forwardSpeed = (
		//if(Input.GetAxis ("Horizontal") > 0 && (forwardDirection.x > 0))
		//{
			float totalSpeed = (Input.GetAxis("Horizontal") + Input.GetAxis("Vertical")) / 2;

			moveDirection = new Vector3(Input.GetAxis("Horizontal"),0,(Input.GetAxis("Vertical")));
			moveDirection.Normalize();

			moveDirection *= speed;

			float translationX = (Input.GetAxis ("Horizontal")) * (speed);
			float translationZ = (Input.GetAxis ("Vertical")) * (speed);
		//}
		translationX *= Time.deltaTime;
		translationZ *= Time.deltaTime;
		//transform.Translate (translationX, 0, translationZ);
		//transform.position += new Vector3 (translationX, 0, translationZ);
		controller.Move(moveDirection * Time.deltaTime);

		if(transform.position.y > 0.2f)
		{
				down = new Vector3(0,-0.1f,0);
				controller.Move((down) * Time.deltaTime);
		}
		
	}
}
}
